package models

import (
	"time"
)

// SysRoute 系统路由表
type SysRoute struct {
	ID             int       `json:"id" gorm:"primarykey;comment:主键"`
	ParentID       *int      `json:"parent_id" gorm:"comment:父级路由ID"`
	Type           int       `json:"type" gorm:"not null;comment:路由类型：0=目录，1=菜单，2=按钮，3=内嵌，4=外链"`
	Name           string    `json:"name" gorm:"uniqueIndex:uk_route_name;not null;size:100;comment:路由名称"`
	Title          string    `json:"title" gorm:"not null;size:100;comment:路由标题"`
	Icon           string    `json:"icon" gorm:"size:100;comment:图标"`
	ActiveIcon     string    `json:"active_icon" gorm:"size:100;comment:激活图标"`
	Perms          string    `json:"perms" gorm:"size:200;comment:权限标识"`
	Status         int       `json:"status" gorm:"not null;default:1;comment:状态：1=启用，0=禁用"`
	Path           string    `json:"path" gorm:"size:200;comment:路由路径"`
	ActivePath     string    `json:"active_path" gorm:"size:200;comment:激活路径"`
	Component      string    `json:"component" gorm:"size:200;comment:组件路径"`
	LinkURL        string    `json:"link_url" gorm:"size:500;comment:外链地址"`
	BadgeType      string    `json:"badge_type" gorm:"size:20;comment:徽章类型"`
	BadgeContent   string    `json:"badge_content" gorm:"size:50;comment:徽章内容"`
	BadgeStyle     string    `json:"badge_style" gorm:"size:50;comment:徽章样式"`
	HideMenu       int       `json:"hide_menu" gorm:"not null;default:0;comment:是否隐藏菜单：1=隐藏，0=显示"`
	HideChildren   int       `json:"hide_children" gorm:"not null;default:0;comment:是否隐藏子菜单：1=隐藏，0=显示"`
	HideBreadcrumb int       `json:"hide_breadcrumb" gorm:"not null;default:0;comment:是否隐藏面包屑：1=隐藏，0=显示"`
	HideTab        int       `json:"hide_tab" gorm:"not null;default:0;comment:是否隐藏标签页：1=隐藏，0=显示"`
	KeepAlive      int       `json:"keep_alive" gorm:"not null;default:0;comment:是否缓存：1=缓存，0=不缓存"`
	Affix          int       `json:"affix" gorm:"not null;default:0;comment:是否固定标签页：1=固定，0=不固定"`
	Sort           int       `json:"sort" gorm:"not null;default:0;comment:排序"`
	CreatedAt      time.Time `json:"created_at" gorm:"not null;default:CURRENT_TIMESTAMP;comment:创建时间"`
	UpdatedAt      time.Time `json:"updated_at" gorm:"not null;default:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;comment:更新时间"`
}

// TableName 指定表名
func (SysRoute) TableName() string {
	return "sys_route"
}

// RouteTree 树状路由结构体（返回给前端）
type RouteTree struct {
	ID        int          `json:"id"`                  // 路由ID
	Pid       *int         `json:"pid,omitempty"`       // 父级ID（根节点为 nil）
	Name      string       `json:"name"`                // 路由名称（唯一标识）
	Type      int          `json:"type"`                // 路由类型：0=目录，1=菜单，2=按钮，3=内嵌，4=外链
	Status    int          `json:"status"`              // 状态：1=启用 0=禁用
	Path      string       `json:"path,omitempty"`      // 路由路径
	Component string       `json:"component,omitempty"` // 前端组件路径
	Perms     string       `json:"authCode,omitempty"`  // 权限标识（System:User:List 等）
	Icon      string       `json:"icon,omitempty"`      // 图标
	Meta      RouteMeta    `json:"meta"`                // 前端 meta 配置
	Children  []*RouteTree `json:"children,omitempty"`  // 子路由
}

// RouteMeta 前端 meta 信息（vben-admin 风格）
type RouteMeta struct {
	Icon           string `json:"icon,omitempty"`           // 菜单图标
	Title          string `json:"title"`                    // 菜单标题
	Badge          string `json:"badge,omitempty"`          // 徽章内容
	BadgeType      string `json:"badgeType,omitempty"`      // 徽章类型：dot/normal/number
	BadgeStyle     string `json:"badgeVariants,omitempty"`  // 徽章样式
	IframeSrc      string `json:"iframeSrc,omitempty"`      // 内嵌地址
	Link           string `json:"link,omitempty"`           // 外链地址
	Order          int    `json:"order,omitempty"`          // 排序
	AffixTab       bool   `json:"affixTab,omitempty"`       // 是否固定 Tab
	HideMenu       bool   `json:"hideMenu,omitempty"`       // 是否隐藏菜单
	HideTab        bool   `json:"hideTab,omitempty"`        // 是否隐藏标签页
	KeepAlive      bool   `json:"keepAlive,omitempty"`      // 是否缓存
	HideChildren   bool   `json:"hideChildren,omitempty"`   // 是否隐藏子菜单
	HideBreadcrumb bool   `json:"hideBreadcrumb,omitempty"` // 是否隐藏面包屑
}
